package com.atguigu.day11.ploy.p2;

/*
人 养 动物
开闭原则:
   开:对功能的拓展是开放的
   闭:对源码的修改是关闭的
多态: 同一个行为 不同的对象有不同的展示能力
  作用:简化代码 提高代码的复用性
  语法:
     向上转型:
         前提:有继承关系
              有方法重写
              有父类的引用 指向子类的实例(对象)
                父亲           孩子
               Animal a = new Dog();
         向上转型后对象的(a)方法调用:
               编译(javac 写完代码后)看父亲:
                  可以调用父类Animal中所有的方法
               运行(java 点击运行按钮后)看孩子:
                如果重写了  调用子类重写父类的方法
                如果没有重写 调用从父类继承的方法
         应用:
            应用在数组  父类类型做数组类型 可以存储任意子类对象
            应用在返回值类型 父类类型做返回值类型 可以返回任意子类对象
            应用在形参  父类类型做形参 可以接收任意子类对象
         注意:
            1.向上转型后 无法使用子类新增(独有)的方法
     向下转型:
 */
public class TestArray {
    public static void main(String[] args) {

        Dog d1 = new Dog();
        Cat c1 = new Cat();
        Monkey m1 = new Monkey();

        // Animal[]arr = {d1,c1,m1};
        Animal[] arr = new Animal[4];
        arr[0] = d1;
        arr[1] = c1;
        arr[2] = m1;

        for (Animal a : arr) {
            a.eat();
        }

    }

}
